//
//  WXWebView.h
//  TestWeb
//
//  Created by tianlong on 2018/8/4.
//  Copyright © 2018年 tianlong. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <WebKit/WebKit.h>

/** JS和OC通信
 JS代码示例：
 function toApp(params) {
    window.test()
    window.xesAppSpeechAssessment.test()
    window.xesAppSpeechAssessment.levelTwoObject.test()
    window.testOneParam('你好')
    window.testOneParamTwoParam('你好',0)
 }
 ☆ window.test()：通过上下文 context[test] 可以访问到原生的test方法，一般采用block的方式。
 ☆ window.xesApp.test()
    1、声明 xesApp 类，声明一个协议（XESAppDelegate）遵守 JSExport，声明协议方法 test
    2、xesApp 遵守 XESAppDelegate，并实现协议方法
    3、设置 context[xesApp] = xesApp实例（此过程为设置xesApp实例对象为JS运行的上下文环境）
 ☆ window.xesApp.levelTwoObject.test()
    1、此种调用方式数据多级调用，需要分别声明与标识同名的类 xesApp，XESAppDelegate<JSExport>
    2、声明类 levelTwoObject，levelTwoObjectDelegate<JSExport>，并在协议中声明 test 方法。
    3、在一级协议 XESAppDelegate 中声明 levelTwoObject 同名属性，并在xesApp.m中 @synthesize levelTwoObject = _levelTwoObject;，并创建 levelTwoObject实例
    4、设置 context[xesApp] = xesApp实例
 ☆ 关于JS给原生传递参数：
    1、传递单个参，以 window.testOneParam('你好')，OC实现中可以用id类型来接收这个参数 -(void)testOneParam:(id)param,通过判断其真实类型来使用，可以是任意类型比如：字符串，字典，数组等。
    2、传递多个参数，以 window.testOneParamTwoParam('你好',0)为例，通过单个参数的传递的方式传递字典同样可以达到传递多个参数的目的，当然还有另外一种方式JS可以通过多参数方法访问原生多参数方法，以此为例，OC中的方法应为 -(void)testOneParam:(id)param TwoParam:(id)param
        ◇◇◇ 注意：OC方法中的命名，后面的参数名也得大写与JS方法中的名字对应。
 */

@interface WXWebView : UIWebView
@property (nonatomic, strong, readonly) NSArray *jsObjects;
/**
 注册JS的运行环境，类名与JS约定的保持一致
 @param obj （必须遵守自定义的协议（自定义的协议遵守<JSExport>），并实现了协议方法（与JS通讯的方法））
 */
- (void)registerJSRuntimeEnvironmentWithObject:(id)obj;
@end





